ac22a507da875d8ea0a29b4ff22af92186ae37a0,platform/core-api/src/com/intellij/psi/util/CachedValuesManager.java,CachedValuesManager,getCachedValue,#PsiElement#CachedValueProvider#,123

Before Change


   */
  public static <T> T getCachedValue(@NotNull PsiElement psi, @NotNull CachedValueProvider<T> provider) {
    CachedValuesManager manager = getManager(psi.getProject());
    return manager.getCachedValue(psi, manager.<T>getKeyForClass(provider.getClass()), provider, false);
  }

  private final ConcurrentMap<String, Key<CachedValue>> keyForProvider = ContainerUtil.newConcurrentMap();

After Change


   */
  public static <T> T getCachedValue(@NotNull final PsiElement psi, @NotNull final CachedValueProvider<T> provider) {
    CachedValuesManager manager = getManager(psi.getProject());
    return manager.getCachedValue(psi, manager.<T>getKeyForClass(provider.getClass()), new CachedValueProvider<T>() {
      @Nullable
      @Override
      public Result<T> compute() {
        Result<T> result = provider.compute();
        if (result != null && !psi.isPhysical()) {
          return Result.create(result.getValue(), ArrayUtil.append(result.getDependencyItems(), psi));
        }
        return result;
      }
    }, false);
  }

  private final ConcurrentMap<String, Key<CachedValue>> keyForProvider = ContainerUtil.newConcurrentMap();